<?php
namespace LPCISII\PHP2012Bundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;

class SecurityController extends Controller
{
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        }

        return $this->render('LPCISIIPHP2012Bundle:Security:login.html.twig', array(
            // last username entered by the user
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error'         => $error,
        ));
    }
    
    /**
     * Cette action affiche le menu de droite. Elle n'est pas destiné à être appelée
     * directement (elle est appelée à l'intérieur d'un template) . C'est dans cette
     * fonction qu'on vérifiera si un utilisateur est connecté et, le cas échéant,
     * on ne renverra pas le formulaire de connexion en paramètre de la vue. Cette fonction
     * n'est normalement pas à gérer pour le premier sprint (tout du moins pas dans son
     * intégralité), elle sert juste pour tester la connexion plus facilement. Idem que pour
     * categoryListAction, on n'est pas obligé de la mettre dans ce contrôleur-là.
     * @return type 
     */
    public function rightMenuAction() {
        $connected = is_object($this->get('security.context')->getToken()->getUser());
        $links = array();
        $parameters = array();
        $prefix = 'LPCISIIPHP2012Bundle_';
        $request = $this->getRequest();
        $session = $request->getSession();
        
        if($connected) {
            $links = array(
                $prefix.'cart' => 'Panier',
                $prefix.'logout' => 'Déconnexion'
            );
            
            if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
                $links[$prefix.'admin'] = 'Administration';
                $parameters['last_username'] = $this->get('security.context')->getToken()->getUser()->getUsername();
            } else {
                $parameters['last_username'] = $this->get('security.context')->getToken()->getUser()->getLogin();
            }
            
            
        } else {
            // get the login error if there is one
            if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            }
            $parameters['last_username'] = $session->get(SecurityContext::LAST_USERNAME);
            $parameters['error'] = $error;
        }
        $parameters['links'] = $links;
        $parameters['connected'] = $connected;
        
        return $this->render('LPCISIIPHP2012Bundle:Page:rightmenu.html.twig', $parameters);
    }
}